//v-limitPositive="2" 小数点后面二位   v-limitPositive 纯数字
const limitPositive = {
    mounted(el, binding) {
        const maxDecimals = binding.value;
        const input = el;
        
        // 处理输入事件
        const handleInput = (e) => {
            // 如果正在输入中文，不处理
            if (e.isComposing) return;
            
            let value = e.target.value;
            
            // 如果为空，直接返回
            if (!value) return;
            
            // 根据是否传入参数决定处理方式
            if (maxDecimals === undefined) {
                // 限制为正整数
                value = value.replace(/[^\d]/g, '');
            } else {
                // 限制小数位数
                value = value.replace(/[^\d.]/g, '');
                
                // 确保只有一个小数点
                const parts = value.split('.');
                if (parts.length > 2) {
                    value = parts[0] + '.' + parts.slice(1).join('');
                }
                
                // 限制小数位数
                if (maxDecimals > 0 && parts.length === 2) {
                    value = parts[0] + '.' + parts[1].slice(0, maxDecimals);
                }
            }
            
            // 如果值没有变化，不触发事件
            if (value === e.target.value) return;
            
            // 更新输入框的值
            e.target.value = value;
            
            // 使用 nextTick 来避免事件循环
            setTimeout(() => {
                const event = new Event('input', { bubbles: true });
                input.dispatchEvent(event);
            }, 0);
        };
        
        // 处理中文输入法
        let isComposing = false;
        const handleCompositionStart = () => {
            isComposing = true;
        };
        
        const handleCompositionEnd = (e) => {
            isComposing = false;
            // 使用 setTimeout 延迟处理，避免事件循环
            setTimeout(() => {
                handleInput(e);
            }, 0);
        };
        
        // 添加事件监听器
        input.addEventListener('input', handleInput);
        input.addEventListener('compositionstart', handleCompositionStart);
        input.addEventListener('compositionend', handleCompositionEnd);
        
        // 保存事件处理函数以便后续清理
        el._handleInput = handleInput;
        el._handleCompositionStart = handleCompositionStart;
        el._handleCompositionEnd = handleCompositionEnd;
    },
    
    unmounted(el) {
        // 清理事件监听器
        el.removeEventListener('input', el._handleInput);
        el.removeEventListener('compositionstart', el._handleCompositionStart);
        el.removeEventListener('compositionend', el._handleCompositionEnd);
    }
};

export default {
    install(app) {
        app.directive('limitPositive', limitPositive);
    }
};
